﻿using System;
using System.Linq;
using System.Windows.Forms;
using CancioneroCONFAD.DAL;
using SubSonic.Repository;

namespace CancioneroCONFAD.Formularios
{
    public partial class VerListas : Form
    {
        SimpleRepository _repository=new SimpleRepository("Cancionero",SimpleRepositoryOptions.None);
        private int idListaSeleccionada = 0;
        public VerListas()
        {
            InitializeComponent();
        }

        private void VerListas_Load(object sender, EventArgs e)
        {
            try
            {
                var listas = from l in _repository.All<Lista>()
                             select l;
                bsListas.DataSource = listas;
                dgListas.DataSource = bsListas;
                dgListas.AutoGenerateColumns = true;
                if (dgListas != null)
                {
                    if (dgListas.Columns != null)
                    {
                        if (dgListas.Columns.Contains("Id"))
                        {
                            dgListas.Columns["Id"].Visible = false;
                        }
                        
                    }
                }

                dgListas.AutoResizeColumns(
                    DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ha ocurrido un error:\n" + ex.Message, "Oops lo sentimos", MessageBoxButtons.OK,
                                MessageBoxIcon.Error);
            }
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void dgListas_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                var row = dgListas.Rows[e.RowIndex];
                idListaSeleccionada = int.Parse(row.Cells["Id"].Value.ToString());
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ha ocurrido un error:\n" + ex.Message, "Oops lo sentimos", MessageBoxButtons.OK,
                                MessageBoxIcon.Error);
            }
        }

        private void btnVer_Click(object sender, EventArgs e)
        {
            try
            {
                if(idListaSeleccionada==0)
                {
                    MessageBox.Show("Debe seleccionar una lista.", "Información", MessageBoxButtons.OK,
                                MessageBoxIcon.Information);
                }
                else
                {
                    var frm = new VerLista(idListaSeleccionada);
                    frm.Show();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ha ocurrido un error:\n" + ex.Message, "Oops lo sentimos", MessageBoxButtons.OK,
                                MessageBoxIcon.Error);
            }
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            try
            {
                if (idListaSeleccionada == 0)
                {
                    MessageBox.Show("Debe seleccionar una lista.", "Información", MessageBoxButtons.OK,
                                MessageBoxIcon.Information);
                }
                else
                {
                    var lista = _repository.Single<Lista>(idListaSeleccionada);
                    var resp = MessageBox.Show("Esta seguro de eliminar la lista " + lista.Nombre, "Lea", MessageBoxButtons.YesNo,
                                MessageBoxIcon.Warning);

                    if (resp.ToString() == "Yes")
                    {
                        _repository.DeleteMany<CancionEnLista>(x => x.IdLista == lista.Id);
                        _repository.Delete<Lista>(lista.Id);
                        MessageBox.Show("La lista " + lista.Nombre + " ha sido eliminada correctamente.",
                                        "Información", MessageBoxButtons.OK,
                                        MessageBoxIcon.Information);
                        RealizarBusqueda();
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ha ocurrido un error:\n" + ex.Message, "Oops lo sentimos", MessageBoxButtons.OK,
                                MessageBoxIcon.Error);
            }
        }

        public void RealizarBusqueda()
        {
            var texto = txtBusqueda.Text;
            var canciones1 = (from c in _repository.All<Lista>()
                              select c).ToList();
            var canciones2 = canciones1.Where(x => x.Nombre.Contains(texto) || x.Descripcion.Contains(texto));


            bsListas.DataSource = canciones2;
            dgListas.DataSource = bsListas;
            dgListas.AutoGenerateColumns = true;

            dgListas.AutoResizeColumns(
                DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader);
        }

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            try
            {
                txtBusqueda.Text = "";
                RealizarBusqueda();
                
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ha ocurrido un error:\n" + ex.Message, "Oops lo sentimos", MessageBoxButtons.OK,
                                MessageBoxIcon.Error);
            }
        }

        private void txtBusqueda_TextChanged(object sender, EventArgs e)
        {
            try
            {
                RealizarBusqueda();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ha ocurrido un error:\n" + ex.Message, "Oops lo sentimos", MessageBoxButtons.OK,
                                MessageBoxIcon.Error);
            }
        }
   
    }
}
